﻿/********************************************************************************/
/* 	state.d																		*/
/*------------------------------------------------------------------------------*/
/*	製作		（　゜ワ゜）ノ　／　松久貫太									*/
/*	製作開始　	2007/05/11														*/
/*	MAIL		omega@personal.email.ne.jp										*/
/*	URL		http://nagoya.cool.ne.jp/o_mega										*/
/*																				*/
/*	このソースは「やわらかライセンス」の元で配布されています。					*/
/*-更新履歴---------------------------------------------------------------------*/
/*	2007/--/--																	*/
/*-その他-----------------------------------------------------------------------*/
/*	なし																		*/
/********************************************************************************/

/* ライブラリのインポート *******************************************************/
private import hell2;		// dHell2ライブラリ
private import vector;
private import keypad;
private import actor;
private import clickable;
private import gamecore;

private import std.string;
private import std.math;
private import std.math2;
private import std.stream;
private import std.thread;

/* グローバル定数定義 ***********************************************************/
GameState g_gamestate = null;


/* load *************************************************************************/
/*	リソースの読み込み															*/
/*-引数-------------------------------------------------------------------------*/
/*	なし																		*/
/*-返り値-----------------------------------------------------------------------*/
/*	なし																		*/
/********************************************************************************/
void load()
{
	Hell_loadTexture("font","resource/font/font.bmp" , [255,255,255]);
	Hell_loadTexture("char","resource/image/char.bmp" , [0,255,0]);
	Hell_loadTexture("menu","resource/image/menu.bmp" , [0,255,0]);
	
	Hell_write("resource loaded.\n");
}

/* GameState ********************************************************************/
/*	ゲーム全体の状態遷移を管理するクラス										*/
/********************************************************************************/
class GameState
{
private:
	int msg;				// リクエストメッセージ
public:
	enum
	{
		MSG_NONE,
		MSG_REQ_TITLE,			// タイトル状態へ　行きたい
		MSG_REQ_GAME,			// ゲーム
	}
	
	void move(){}
	void draw(){}
	
	// 設定
	void setMsg(int m)
	{
		msg = m;
	}
	// 取得
	int getMsg()
	{
		return msg;
	}
}



void loop()
{
	if(g_gamestate)
	{
		// メッセージ指示による状態遷移
		switch(g_gamestate.msg)
		{
			case GameState.MSG_NONE:
				break;
			case GameState.MSG_REQ_TITLE:
				g_gamestate = new TitleMain();
				break;
			case GameState.MSG_REQ_GAME:
				g_gamestate = new GameMain();
				break;
			default:
				Hell_write("Unknown msg at loop.");
		}
	}
	else
	{
		// 初期状態
		g_gamestate = new GameMain();
		Hell_write("Exec loop.\n");
	}
	
	g_gamestate.move();
	g_gamestate.draw();
}

/* TitleMain ********************************************************************/
/*	タイトルの状態																*/
/********************************************************************************/

class TitleMain : GameState
{
public:
	int timer;
	ClickablePool menu;
	
	this()
	{
		timer = 0;
				
		menu = new ClickablePool();
		menu.add("START" , new Vec3(280 , 400 , 0) , new Vec3(96 , 32 , 0));
	}
	
	void move()
	{
		timer++;
		
		string select = menu.getMouseClick();
		
		if(select == "START"){
			setMsg(GameState.MSG_REQ_GAME);
		}
	}
	
	void draw()
	{
		Hell_begin();
		resetPerspective();
		Hell_setAlpha(HELL_ALPHA_NORMAL);
		Hell_drawRect(0,0,640,480, 0, 0, 0,0,0,255);
		
		menu.draw();
				
		Hell_drawFont("HOGE" , 240, 160 , 4 , 255,255,255);
		Hell_drawFont("OMEGA WITH GAMEHELL2000" , 140, 480-48 , 2 , 160,160,160);
	}
}

